Developer

【SQL基礎】DISTINCTの基本構文 重複行の除外
2021.01.27
Lv1

【SQL基礎】DISTINCTの基本構文 重複行の除外

カラム内には重複した値が存在することがあります。
例えば、以下のテーブル(テーブル名:teachers)のaddressカラムには”東京都”という重複した値が3件存在します。

それらの重複したレコードを1件分のレコードとして扱いたい場合はDISTINCTを使用します

本記事では引き続き、前出のteachersテーブルを例として扱います。


1.SELECT文でDISTINCTを使用する。

DISTINCTを使用する場合と使用しない場合でどのように結果が変わるのか見ていきましょう。

例1-1.teachersテーブルのaddressカラムを抽出する(DISTINCTなし)。

SELECT address
FROM teachers;

例1-2.teachersテーブルのaddressカラムを抽出する(DISTINCTあり)。

SELECT DISTINCT address
FROM teachers;

DISTINCTを使用することで、重複したレコードを1件分として取得できています。


2.集約関数でDISTINCTを使用する。

集約関数とDISTINCTは併せて使うことができます。
特に、レコード数を返す関数であるCOUNT関数はDISTINCTと併用されることが多いです。
参考:COUNT関数

例1-1、例1-2で扱ったaddressカラムをCOUNTしてみましょう。

例2-1.teachersテーブルのaddressカラムのレコード数を取得する(DISTINCTなし)。

SELECT COUNT(address)
FROM teachers;

東京都が3件、埼玉県が1件でレコード数は4です。

例2-2.teachersテーブルのaddressカラムのレコード数を取得する(DISTINCTあり)。

SELECT COUNT(DISTINCT address)
FROM teachers;

重複している「東京都」を1件分のレコードとして扱っているのでレコード数は2です。


学習のポイント

・DISTINCTを使用することで重複したレコードを1件分のレコードとして扱うことができる。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.参加国は何種類のグループに分けられているでしょうか。
countriesテーブル(id,name,ranking,group_nameの4つのカラムで構成されている)を使って答えを導いてください。

答え
[sql] SELECT COUNT(DISTINCT group_name)
FROM countries;
[/sql]

8グループです。

DISTINCTを使うと重複しているレコードを一件分として扱います。group_nameカラムの重複行を一件分として扱い、COUNT関数を使用することでグループ数を求めることができます。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ